home *** CD-ROM | disk | FTP | other *** search
/ Clickx 115 / Clickx 115.iso / software / tools / windows / tails-i386-0.16.iso / live / filesystem.squashfs / lib / udev / write_cd_rules < prev    next >
Encoding:
Text File  |  2010-12-12  |  3.1 KB  |  128 lines

  1. #!/bin/sh -e
  2.  
  3. # This script is run if an optical drive lacks a rule for persistent naming.
  4. #
  5. # It adds symlinks for optical drives based on the device class determined
  6. # by cdrom_id and used ID_PATH to identify the device.
  7.  
  8. # (C) 2006 Marco d'Itri <md@Linux.IT>
  9. #
  10. # This program is free software: you can redistribute it and/or modify
  11. # it under the terms of the GNU General Public License as published by
  12. # the Free Software Foundation, either version 2 of the License, or
  13. # (at your option) any later version.
  14.  
  15. # This program is distributed in the hope that it will be useful,
  16. # but WITHOUT ANY WARRANTY; without even the implied warranty of
  17. # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  18. # GNU General Public License for more details.
  19.  
  20. # You should have received a copy of the GNU General Public License
  21. # along with this program.  If not, see <http://www.gnu.org/licenses/>.
  22.  
  23. # debug, if UDEV_LOG=<debug>
  24. if [ -n "$UDEV_LOG" ]; then
  25.     if [ "$UDEV_LOG" -ge 7 ]; then
  26.         set -x
  27.     fi
  28. fi
  29.  
  30. RULES_FILE="/etc/udev/rules.d/70-persistent-cd.rules"
  31.  
  32. . /lib/udev/rule_generator.functions
  33.  
  34. find_next_available() {
  35.     raw_find_next_available "$(find_all_rules 'SYMLINK\+=' "$1")"
  36. }
  37.  
  38. write_rule() {
  39.     local match="$1"
  40.     local link="$2"
  41.     local comment="$3"
  42.  
  43.     {
  44.     if [ "$PRINT_HEADER" ]; then
  45.         PRINT_HEADER=
  46.         echo "# This file was automatically generated by the $0"
  47.         echo "# program, run by the cd-aliases-generator.rules rules file."
  48.         echo "#"
  49.         echo "# You can modify it, as long as you keep each rule on a single"
  50.         echo "# line, and set the \$GENERATED variable."
  51.         echo ""
  52.     fi
  53.  
  54.     [ "$comment" ] && echo "# $comment"
  55.     echo "$match, SYMLINK+=\"$link\", ENV{GENERATED}=\"1\""
  56.     } >> $RULES_FILE
  57.     SYMLINKS="$SYMLINKS $link"
  58. }
  59.  
  60. if [ -z "$DEVPATH" ]; then
  61.     echo "Missing \$DEVPATH." >&2
  62.     exit 1
  63. fi
  64. if [ -z "$ID_CDROM" ]; then
  65.     echo "$DEVPATH is not a CD reader." >&2
  66.     exit 1
  67. fi
  68.  
  69. if [ "$1" ]; then
  70.     METHOD="$1"
  71. else
  72.     METHOD='by-path'
  73. fi
  74.  
  75. case "$METHOD" in
  76.     by-path)
  77.     if [ -z "$ID_PATH" ]; then
  78.         echo "$DEVPATH not supported by path_id. by-id may work." >&2
  79.         exit 1
  80.     fi
  81.     RULE="ENV{ID_PATH}==\"$ID_PATH\""
  82.     ;;
  83.  
  84.     by-id)
  85.     if [ "$ID_SERIAL" ]; then
  86.         RULE="ENV{ID_SERIAL}==\"$ID_SERIAL\""
  87.     elif [ "$ID_MODEL" -a "$ID_REVISION" ]; then
  88.         RULE="ENV{ID_MODEL}==\"$ID_MODEL\", ENV{ID_REVISION}==\"$ID_REVISION\""
  89.     else
  90.         echo "$DEVPATH not supported by ata_id. by-path may work." >&2
  91.         exit 1
  92.     fi
  93.     ;;
  94.  
  95.     *)
  96.     echo "Invalid argument (must be either by-path or by-id)." >&2
  97.     exit 1
  98.     ;;
  99. esac
  100.  
  101. # Prevent concurrent processes from modifying the file at the same time.
  102. lock_rules_file
  103.  
  104. # Check if the rules file is writeable.
  105. choose_rules_file
  106.  
  107. link_num=$(find_next_available 'cdrom[0-9]*')
  108.  
  109. match="SUBSYSTEM==\"block\", ENV{ID_CDROM}==\"?*\", $RULE"
  110.  
  111. comment="$ID_MODEL ($ID_PATH)"
  112.  
  113.     write_rule "$match" "cdrom$link_num" "$comment"
  114. [ "$ID_CDROM_CD_R" -o "$ID_CDROM_CD_RW" ] && \
  115.     write_rule "$match" "cdrw$link_num"
  116. [ "$ID_CDROM_DVD" ] && \
  117.     write_rule "$match" "dvd$link_num"
  118. [ "$ID_CDROM_DVD_R" -o "$ID_CDROM_DVD_RW" -o "$ID_CDROM_DVD_RAM" ] && \
  119.     write_rule "$match" "dvdrw$link_num"
  120. echo >> $RULES_FILE
  121.  
  122. unlock_rules_file
  123.  
  124. echo $SYMLINKS
  125.  
  126. exit 0
  127.  
  128.